import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Deze klasse geeft een grafische schil (User interface) weer
 * 
 * @author Wim Barelds & Sander Wagenaar
 * @version 12-01-2012
 */
public class GUI implements ActionListener
{
    // Deze moeten instantie variabelen zijn om toegankelijk te zijn voor actionlistener
    private KantineSimulatie kantineSimulatie;
    
    // Artikelen toevoegen scherm
    private JTextField artikelNaam;
    private JTextField artikelPrijs;
    // Configuratie scherm
    private JTextField minArtikelenPerSoort;
    private JTextField maxArtikelenPerSoort;
    private JTextField minArtikelenPerPersoon;
    private JTextField maxArtikelenPerPersoon;
    private JTextField minPersonenPerDag;
    private JTextField maxPersonenPerDag;
    // Simulatie scherm
    private JTextField numDagenText;
    private JTextArea outputField;
    
    /**
     * Constructor for objects of class View
     */
    public GUI()
    {
        kantineSimulatie = new KantineSimulatie();
        kantineSimulatie.setGUI(this);
        
        // Create frame
        JFrame frame = new JFrame("Kantine Simulatie");
        Container contentPane = frame.getContentPane();
        
        // Tabbladen
        JTabbedPane tabbedArea = new JTabbedPane();
        tabbedArea.add("Artikelen toevoegen", maakArtikelenPaneel());
        tabbedArea.add("Configuratie", maakConfiguratiePaneel());
        tabbedArea.add("Simulatie", maakSimulatiePaneel());
        contentPane.add(tabbedArea);
        
        frame.pack();
        frame.setVisible(true);
    }
    
    private Container maakArtikelenPaneel()
    {
        Container artikelenLayout = new Container();
        artikelenLayout.setLayout(new BorderLayout());
        
        Container inputGrid = new Container();
        inputGrid.setLayout(new GridLayout(0, 2)); // 2 breed, zo hoog als nodig
        
        inputGrid.add(new JLabel("Product naam:"));
        artikelNaam = new JTextField("");
        inputGrid.add(artikelNaam);
        
        inputGrid.add(new JLabel("Product prijs:"));
        artikelPrijs = new JTextField("");
        inputGrid.add(artikelPrijs);
        
        JButton productToevoegen = new JButton("Product toevoegen");
        productToevoegen.addActionListener(this);
        
        artikelenLayout.add(inputGrid, BorderLayout.NORTH);
        artikelenLayout.add(productToevoegen, BorderLayout.CENTER);
        
        return artikelenLayout;
    }
    
    private Container maakConfiguratiePaneel()
    {
        Container configLayout = new Container();
        configLayout.setLayout(new GridLayout(0, 2)); // 2 breed, zo hoog als nodig
        
        configLayout.add(new JLabel("Minimaal aantal artikelen per soort:"));
        minArtikelenPerSoort = new JTextField("10000");
        configLayout.add(minArtikelenPerSoort);
        
        configLayout.add(new JLabel("Maximaal aantal artikelen per soort:"));
        maxArtikelenPerSoort = new JTextField("20000");
        configLayout.add(maxArtikelenPerSoort);
        
        configLayout.add(new JLabel("Minimaal aantal artikelen per klant:"));
        minArtikelenPerPersoon = new JTextField("1");
        configLayout.add(minArtikelenPerPersoon);
        
        configLayout.add(new JLabel("Maximaal aantal artikelen per klant:"));
        maxArtikelenPerPersoon = new JTextField("4");
        configLayout.add(maxArtikelenPerPersoon);
        
        configLayout.add(new JLabel("Minimaal aantal klanten per dag:"));
        minPersonenPerDag = new JTextField("50");
        configLayout.add(minPersonenPerDag);
        
        configLayout.add(new JLabel("Maximaal aantal klanten per dag:"));
        maxPersonenPerDag = new JTextField("100");
        configLayout.add(maxPersonenPerDag);
        
        return configLayout;
    }
    
    private Container maakSimulatiePaneel()
    {
        Container simulateLayout = new Container();
        simulateLayout.setLayout(new BorderLayout());
        
        Container simulateLayoutInput = new Container();
        simulateLayoutInput.setLayout(new GridLayout(0, 2));
        
        // Aantal dagen label en input
        simulateLayoutInput.add(new JLabel("Aantal dagen:"));
        numDagenText = new JTextField("10");
        simulateLayoutInput.add(numDagenText);
        
        // Start simulatie knop
        JButton startButton = new JButton("Begin Simulatie");
        startButton.addActionListener(this);
        
        // Scrollbaar textarea
        outputField = new JTextArea(12, 0);
        JScrollPane scrollingTextArea = new JScrollPane(outputField);
        
        simulateLayout.add(simulateLayoutInput, BorderLayout.NORTH);
        simulateLayout.add(scrollingTextArea, BorderLayout.CENTER);
        simulateLayout.add(startButton, BorderLayout.SOUTH);
        
        return simulateLayout;
    }
    
    public void actionPerformed(ActionEvent e)
    {
        String actionCommand = e.getActionCommand();
        // getActionCommand returned de text op de ingedrukte knop
        
        if(actionCommand.equals("Begin Simulatie")) {
            kantineSimulatie.configureer(
                Integer.parseInt(minArtikelenPerSoort.getText()),
                Integer.parseInt(maxArtikelenPerSoort.getText()),
                Integer.parseInt(minArtikelenPerPersoon.getText()),
                Integer.parseInt(maxArtikelenPerPersoon.getText()),
                Integer.parseInt(minPersonenPerDag.getText()),
                Integer.parseInt(maxPersonenPerDag.getText())
            );
            kantineSimulatie.simuleer(Integer.parseInt(this.numDagenText.getText()));
        }
        else if(actionCommand.equals("Product toevoegen")) {
            String artikelNaam = this.artikelNaam.getText();
            Double artikelPrijs = Double.parseDouble("0" + this.artikelPrijs.getText());
            
            if(artikelNaam == null || artikelNaam.equals("") || artikelPrijs == 0.0) {
                System.out.println("U heeft geen productnaam of prijs ingevuld.");
            }
            else {
                kantineSimulatie.artikelToevoegen(artikelNaam, artikelPrijs);
                this.artikelNaam.setText("");
                this.artikelPrijs.setText("");
            }
        }
    }
    
    public void print(String message)
    {
        outputField.append(message);
    }
}
